package Vista;

import Controlador.ControladorCargarArchivos;
import Controlador.ControladorPrincipal;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.filechooser.FileFilter;






import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.filechooser.FileFilter;
import javax.xml.parsers.ParserConfigurationException;

/**
 *
 * @author Tapsin
 */
public class JPCargarArchivos extends javax.swing.JPanel {

    /** Creates new form JPCargarArchivos */
    public ControladorCargarArchivos control;
    int cargarA = 0;
    /*Con esta variable guardamos el path para que se carguen ambos archivos.*/
    String pathArchivoSeleccionado = "";
    
    public JPCargarArchivos(ControladorCargarArchivos control) {
        this.control = control;
        try {
// apariencia del SO
            UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(VistaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(VistaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(VistaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnsupportedLookAndFeelException ex) {
            Logger.getLogger(VistaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }
        initComponents();

        
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        buttonGroup1 = new javax.swing.ButtonGroup();
        jPanel2 = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        campoRutaMC = new javax.swing.JTextField();
        bExaminarMC = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        campoRutaON = new javax.swing.JTextField();
        bExaminarON = new javax.swing.JButton();
        bCargarArchivos = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jLabel11 = new javax.swing.JLabel();

        setName("Form"); // NOI18N

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(proyectodetitulo.ProyectoDeTituloApp.class).getContext().getResourceMap(JPCargarArchivos.class);
        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, resourceMap.getString("jPanel2.border.title"), javax.swing.border.TitledBorder.LEFT, javax.swing.border.TitledBorder.DEFAULT_POSITION)); // NOI18N
        jPanel2.setAutoscrolls(true);
        jPanel2.setName("jPanel2"); // NOI18N

        jPanel1.setBackground(resourceMap.getColor("jPanel1.background")); // NOI18N
        jPanel1.setBorder(new javax.swing.border.LineBorder(null, 1, true));
        jPanel1.setForeground(resourceMap.getColor("jPanel1.foreground")); // NOI18N
        jPanel1.setToolTipText(resourceMap.getString("jPanel1.toolTipText")); // NOI18N
        jPanel1.setEnabled(false);
        jPanel1.setName("jPanel1"); // NOI18N

        jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
        jLabel1.setName("jLabel1"); // NOI18N

        campoRutaMC.setEnabled(false);
        campoRutaMC.setName("campoRutaMC"); // NOI18N

        bExaminarMC.setText(resourceMap.getString("bExaminarMC.text")); // NOI18N
        bExaminarMC.setName("bExaminarMC"); // NOI18N
        bExaminarMC.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bExaminarMCActionPerformed(evt);
            }
        });

        jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N
        jLabel2.setName("jLabel2"); // NOI18N

        campoRutaON.setEnabled(false);
        campoRutaON.setName("campoRutaON"); // NOI18N

        bExaminarON.setText(resourceMap.getString("bExaminarON.text")); // NOI18N
        bExaminarON.setEnabled(false);
        bExaminarON.setName("bExaminarON"); // NOI18N
        bExaminarON.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bExaminarONActionPerformed(evt);
            }
        });

        bCargarArchivos.setText(resourceMap.getString("bCargarArchivos.text")); // NOI18N
        bCargarArchivos.setToolTipText(resourceMap.getString("bCargarArchivos.toolTipText")); // NOI18N
        bCargarArchivos.setEnabled(false);
        bCargarArchivos.setName("bCargarArchivos"); // NOI18N
        bCargarArchivos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bCargarArchivosActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(0, 0, 0)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel2)
                            .addComponent(jLabel1))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(campoRutaON, javax.swing.GroupLayout.DEFAULT_SIZE, 445, Short.MAX_VALUE)
                            .addComponent(campoRutaMC, javax.swing.GroupLayout.DEFAULT_SIZE, 445, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(bExaminarMC, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(bExaminarON, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addGap(586, 586, 586)
                        .addComponent(bCargarArchivos, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoRutaMC)
                    .addComponent(jLabel1)
                    .addComponent(bExaminarMC, javax.swing.GroupLayout.DEFAULT_SIZE, 33, Short.MAX_VALUE))
                .addGap(50, 50, 50)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoRutaON, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2)
                    .addComponent(bExaminarON, javax.swing.GroupLayout.DEFAULT_SIZE, 33, Short.MAX_VALUE))
                .addGap(18, 18, 18)
                .addComponent(bCargarArchivos, javax.swing.GroupLayout.DEFAULT_SIZE, 35, Short.MAX_VALUE)
                .addGap(26, 26, 26))
        );

        jLabel4.setName("jLabel4"); // NOI18N

        jLabel5.setName("jLabel5"); // NOI18N

        jLabel6.setName("jLabel6"); // NOI18N

        jLabel7.setName("jLabel7"); // NOI18N

        jLabel8.setName("jLabel8"); // NOI18N

        jLabel9.setName("jLabel9"); // NOI18N

        jLabel11.setName("jLabel11"); // NOI18N

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGap(44, 44, 44)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel9)
                            .addComponent(jLabel6)
                            .addGroup(jPanel2Layout.createSequentialGroup()
                                .addComponent(jLabel8)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 532, Short.MAX_VALUE)
                                .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(jPanel2Layout.createSequentialGroup()
                                .addComponent(jLabel7)
                                .addGap(215, 215, 215)
                                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(jPanel2Layout.createSequentialGroup()
                                        .addGap(192, 192, 192)
                                        .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addComponent(jLabel11))))))
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addGap(58, 58, 58)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel8)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(jLabel4)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel6)))
                .addGap(56, 56, 56)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 96, Short.MAX_VALUE)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel5)
                    .addComponent(jLabel7))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel11)
                .addGap(6, 6, 6)
                .addComponent(jLabel9)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, 738, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
    }// </editor-fold>//GEN-END:initComponents

    private void bExaminarMCActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bExaminarMCActionPerformed
        /*528*/         //funcion para buscar el archivo XML de entrada (Mapa Conversacional)
        /*529*/ String entrada;
        /*530*/ final JFileChooser fc = new JFileChooser();

        /* Se agrega filtro de extension XML */
        FileFilter XMLFilter = new ExtensionFileFilter("Archivo XML", new String[]{"XML"});
        fc.addChoosableFileFilter(XMLFilter);
        /**************************************/
        
        /*Revisamos si existe algun path en caso de existir le decimos en que path se debe abrir*/
        if (  !pathArchivoSeleccionado.equalsIgnoreCase("") )
            fc.setCurrentDirectory(new File(pathArchivoSeleccionado));
        
        /*531*/ int returnVal = fc.showOpenDialog(this);
        /*532*/ if (returnVal == JFileChooser.APPROVE_OPTION) {
            /*533*/ File file = fc.getSelectedFile();
            /*534*/ entrada = file.getPath();
            /*Guardamos el path del archivo*/
            pathArchivoSeleccionado =  entrada;
            
            /*535*/             //seteo en el campo correspondiente
            String extension = entrada.substring(entrada.lastIndexOf("."));
            if (  !extension.equalsIgnoreCase(".xml")  ){
                alerta("Debe seleccionar solo archivos con extensión XML");
                campoRutaMC.setText("");
            }else{
                campoRutaMC.setText(entrada);
                this.bExaminarON.setEnabled(true);
            }
            /*537*/        }
        /*539*/ 
}//GEN-LAST:event_bExaminarMCActionPerformed

    private void bExaminarONActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bExaminarONActionPerformed
        /*547*/         //funcion para buscar el archivo XML de entrada (Objetivos del negocio)
        /*548*/ String entrada;
        /*549*/ final JFileChooser fc = new JFileChooser();

        /* Se agrega filtro de extension XML */
        FileFilter XMLFilter = new ExtensionFileFilter("Archivo XML", new String[]{"XML"});
        fc.addChoosableFileFilter(XMLFilter);
        /**************************************/
        /*Revisamos si existe algun path en caso de existir le decimos en que path se debe abrir*/
        if (  !pathArchivoSeleccionado.equalsIgnoreCase("") )
            fc.setCurrentDirectory(new File(pathArchivoSeleccionado));
        
        /*550*/ int returnVal = fc.showOpenDialog(this);
        /*551*/ if (returnVal == JFileChooser.APPROVE_OPTION) {
            /*552*/ File file = fc.getSelectedFile();
            /*553*/ entrada = file.getPath();
            /*554*/             //seteo en el campo correspondiente
           /*Guardamos el path utilizado*/
            pathArchivoSeleccionado = entrada;
            String extension = entrada.substring(entrada.lastIndexOf("."));
            if (  !extension.equalsIgnoreCase(".xml")  ){
                alerta("Debe seleccionar solo archivos con extensión XML");
                campoRutaON.setText("");
            }else{
                campoRutaON.setText(entrada);
                this.bCargarArchivos.setEnabled(true);
            }
            /*555*/ 
            /*556*/        }
}//GEN-LAST:event_bExaminarONActionPerformed

    private void bCargarArchivosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bCargarArchivosActionPerformed
        /*565*/
        this.control.control.getVista().indeterminateBar();
        this.control.control.getVista().setTextChargeLabel("Cargando archivos...");
        /*566*/ String resp = null;
        /*567*/ try {
            /*568*/             //valida la estructura del archivo mapa conversacional
            /*569*/ if (control.validarMapaConversacionelXML(this.campoRutaMC.getText()) == null) {
                /*570*/                 //valida la estructura del archivo de los objetivos del negocio
                /*571*/ if (control.validarObjetivosDelNegocioXML(this.campoRutaON.getText()) == null) {
                    /*572*/ resp = control.cargarArchivosXML(campoRutaMC.getText(), campoRutaON.getText());
                    /*573*/ this.cargarA = 0;
                    /*574*/ if (resp == null) {
                        /*575*/                         //verifica que todas los enlaces de las pertenencias tengan un id existente
                        /*576*/ if (control.verificarPertenencias() == 0) {
                            /*577*/                             //verifica que todos las excepciones tengan un id existente
                            /*578*/ if (control.verificarExcepciones() == 0) {
                                //  this.Estado1.setIcon(new ImageIcon(getClass().getResource("/Fotos/ready.png")));
                                Icon ico = new ImageIcon(getClass().getResource("/Fotos/tick2.png"));
                                this.control.control.getVista().stopBar();
                                this.control.control.getVista().setTextChargeLabel("Archivos Cargados");

                                /*579*/ JOptionPane.showMessageDialog(null, "Los archivos han sido cargados exitosamente", "Aviso", JOptionPane.INFORMATION_MESSAGE, ico);
                                /*580*/ control.valido = true;

                                //this.bContinuar.setEnabled(true);
                                /*581*/                            } else {

                                  this.control.control.getVista().stopBar();
                                  this.control.control.getVista().setTextChargeLabel("Error al cargar archivos");
                                /*582*/ JOptionPane.showMessageDialog(null, "ID de Excepciones incorrecto", "¡Error!", JOptionPane.ERROR_MESSAGE);
                                control.valido = false;
                                /*583*/                            }
                            /*584*/                        } else {
                            control.valido = false;
                            this.control.control.getVista().stopBar();
                                  this.control.control.getVista().setTextChargeLabel("Error al cargar archivos");
                            /*585*/ JOptionPane.showMessageDialog(null, "ID de Pertenencias incorrecto", "¡Error!", JOptionPane.ERROR_MESSAGE);
                            /*586*/                        }
                        /*587*/                    } else {
                        control.valido = false;
                        this.control.control.getVista().stopBar();
                                  this.control.control.getVista().setTextChargeLabel("Error al cargar archivos");//+ resp
                        /*588*/ JOptionPane.showMessageDialog(null, "Los archivos de entrada presentan problemas al cargar. ", "¡Error!", JOptionPane.ERROR_MESSAGE);
                        /*589*/                    }
                    /*590*/                } else {
                    control.valido = false;
                    this.control.control.getVista().stopBar();
                                  this.control.control.getVista().setTextChargeLabel("Error al cargar archivos");
                    /*591*/ JOptionPane.showMessageDialog(null, "Archivo XML: 'Objetivos del negocio' incorrecto. Revise la sintaxis del archivo o verifique que éste sea válido", "¡Error!", JOptionPane.ERROR_MESSAGE);
                    /*592*/                     //resp="error";
                    /*593*/                }
                /*594*/
                /*595*/            } else {
                this.control.control.getVista().stopBar();
                                  this.control.control.getVista().setTextChargeLabel("Error al cargar archivos"); // + control.validarMapaConversacionelXML(this.campoRutaMC.getText())
                /*596*/ JOptionPane.showMessageDialog(null, "Archivo XML: 'Mapa Conversacional' incorrecto. Revise estructura del archivo o verifique que éste sea válido", "¡Error!", JOptionPane.ERROR_MESSAGE);
                /*597*/                 //resp="error";
                /*598*/            }
            /*599*/        } catch (ParserConfigurationException ex) {
            /*600*/          //   Logger.getLogger(VistaCargarArchivos.class.getName()).log(Level.SEVERE, null, ex);
                /*601*/        }
        /*602*/
}//GEN-LAST:event_bCargarArchivosActionPerformed

    public void alerta(String mensaje) {
        JOptionPane.showMessageDialog(null, mensaje, "¡Advertencia!", JOptionPane.WARNING_MESSAGE);
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton bCargarArchivos;
    private javax.swing.JButton bExaminarMC;
    private javax.swing.JButton bExaminarON;
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.JTextField campoRutaMC;
    private javax.swing.JTextField campoRutaON;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    // End of variables declaration//GEN-END:variables


 

    public JButton getbCargarArchivos() {
        return bCargarArchivos;
    }

    public void setbCargarArchivos(JButton bCargarArchivos) {
        this.bCargarArchivos = bCargarArchivos;
    }

    public JButton getbExaminarMC() {
        return bExaminarMC;
    }

    public void setbExaminarMC(JButton bExaminarMC) {
        this.bExaminarMC = bExaminarMC;
    }

    public JButton getbExaminarON() {
        return bExaminarON;
    }

    public void setbExaminarON(JButton bExaminarON) {
        this.bExaminarON = bExaminarON;
    }

    public JTextField getCampoRutaMC() {
        return campoRutaMC;
    }

    public void setCampoRutaMC(JTextField campoRutaMC) {
        this.campoRutaMC = campoRutaMC;
    }

    public JTextField getCampoRutaON() {
        return campoRutaON;
    }

    public void setCampoRutaON(JTextField campoRutaON) {
        this.campoRutaON = campoRutaON;
    }

}
